/*
 * Copyright (c) 2025 Li Auto Inc. and its affiliates
 * Licensed under the Apache License, Version 2.0(the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef CANTRCV_TJA1145_H_
#define CANTRCV_TJA1145_H_

#include "cantrcv_tja1145_configtypes.h"
#include "cantrcv_tja1145_types.h"

#define CANTRCV1145_START_SEC_CODE
#include "cantrcv1145_memmap.h"

/*!*********************************************************************************************************************
 * @brief          CanTrcv1145初始化函数
 * @details        CanTrcv1145初始化函数
 * @reentrant      不支持重入
 * @synchronous    同步
 **********************************************************************************************************************/
FUNC(void, CANTRCV1145_CODE) cantrcv_tja1145_init(const cantrcv_cfg_t *cfg_ptr);

/*!*********************************************************************************************************************
 * @brief          CanTrcv1145 清除po event
 * @details        CanTrcv1145 清除po event
 * @reentrant      不支持重入
 * @synchronous    同步
 **********************************************************************************************************************/
FUNC(void, CANTRCV1145_CODE) cantrcv_tja1145_clear_po_event(void);

/*!*********************************************************************************************************************
 * @brief          CanTrcv1145 进入唤醒引脚下降沿使能
 * @details        CanTrcv1145 进入唤醒引脚下降沿使能
 * @reentrant      不支持重入
 * @synchronous    同步
 **********************************************************************************************************************/
FUNC(void, CANTRCV1145_CODE) cantrcv_tja1145_enable_wk_pin_rising_edge(void);

/*!*********************************************************************************************************************
 * @brief          CanTrcv1145 进入CAN 唤醒使能
 * @details        CanTrcv1145 进入CAN 唤醒使能
 * @reentrant      不支持重入
 * @synchronous    同步
 **********************************************************************************************************************/
FUNC(void, CANTRCV1145_CODE) cantrcv_tja1145_enable_can_wakeup(void);

/*!*********************************************************************************************************************
 * @brief          CanTrcv1145 进入CAN 睡眠
 * @details        CanTrcv1145 进入CAN 睡眠
 * @reentrant      不支持重入
 * @synchronous    同步
 **********************************************************************************************************************/
FUNC(void, CANTRCV1145_CODE) cantrcv_tja1145_enter_sleep_mode(void);

/*!*********************************************************************************************************************
 * @brief          CanTrcv1145设置控制器模式函数
 * @details        CanTrcv1145设置控制器模式函数
 * @retval         E_OK            控制器模式请求已被接受
 * @retval         E_NOT_OK        控制器模式请求未被接受
 * @reentrant      不支持重入
 * @synchronous    同步
 **********************************************************************************************************************/
FUNC(Std_ReturnType, CANTRCV1145_CODE) cantrcv_tja1145_op_mode_set(uint8 cantrcv_idx, CanTrcv_TrcvModeType op_mode);

/*!*********************************************************************************************************************
 * @brief          CanTrcv1145获取控制器模式函数
 * @details        CanTrcv1145获取控制器模式函数
 * @retval         E_OK            控制器模式获取成功
 * @retval         E_NOT_OK        控制器模式获取失败
 * @reentrant      不支持重入
 * @synchronous    同步
 **********************************************************************************************************************/
FUNC(Std_ReturnType, CANTRCV1145_CODE) cantrcv_tja1145_op_mode_get(uint8 cantrcv_idx, CanTrcv_TrcvModeType* op_mode);

/*!*********************************************************************************************************************
 * @brief          CanTrcv1145获取总线唤醒原因函数
 * @details        CanTrcv1145获取总线唤醒原因函数
 * @retval         E_OK            获取总线唤醒原因成功
 * @retval         E_NOT_OK        获取总线唤醒原因失败
 * @reentrant      不支持重入
 * @synchronous    同步
 **********************************************************************************************************************/
FUNC(Std_ReturnType, CANTRCV1145_CODE) cantrcv_tja1145_bus_wk_reason_get(uint8 cantrcv_idx, CanTrcv_TrcvWakeupReasonType
	*wk_reason);

/*!*********************************************************************************************************************
 * @brief          CanTrcv1145设置唤醒模式函数
 * @details        CanTrcv1145设置唤醒模式函数
 * @retval         E_OK            设置唤醒模式成功
 * @retval         E_NOT_OK        设置唤醒模式失败
 * @reentrant      不支持重入
 * @synchronous    同步
 **********************************************************************************************************************/
FUNC(Std_ReturnType, CANTRCV1145_CODE) cantrcv_tja1145_wk_mode_set(uint8 cantrcv_idx,
	CanTrcv_TrcvWakeupModeType trcv_wk_mode);

/*!*********************************************************************************************************************
 * @brief          CanTrcv1145校验唤醒函数
 * @details        CanTrcv1145校验唤醒函数
 * @retval         E_OK            校验唤醒成功
 * @retval         E_NOT_OK        校验唤醒失败
 * @reentrant      不支持重入
 * @synchronous    同步
 **********************************************************************************************************************/
FUNC(Std_ReturnType, CANTRCV1145_CODE) cantrcv_tja1145_wk_check(uint8 cantrcv_idx);

/*!*********************************************************************************************************************
 * @brief          CanTrcv1145清除收发器唤醒标志函数
 * @details        CanTrcv1145清除收发器唤醒标志函数
 * @retval         E_OK            清除收发器唤醒标志成功
 * @retval         E_NOT_OK        清除收发器唤醒标志失败
 * @reentrant      不支持重入
 * @synchronous    同步
 **********************************************************************************************************************/
FUNC(Std_ReturnType, CANTRCV1145_CODE) cantrcv_tja1145_wk_flag_clear(uint8 cantrcv_idx);

/*!*********************************************************************************************************************
 * @brief          CanTrcv1145检验唤醒标志函数
 * @details        CanTrcv1145检验唤醒标志函数
 * @retval         E_OK            检验唤醒标志成功
 * @retval         E_NOT_OK        检验唤醒标志失败
 * @reentrant      不支持重入
 * @synchronous    同步
 **********************************************************************************************************************/
FUNC(Std_ReturnType, CANTRCV1145_CODE) cantrcv_tja1145_wk_flag_check(uint8 cantrcv_idx);

/*!*********************************************************************************************************************
 * @brief          CanTrcv1145主函数
 * @details        CanTrcv1145主函数
 * @reentrant      不支持重入
 * @synchronous    同步
 **********************************************************************************************************************/
FUNC(void, CANTRCV1145_CODE) CanTrcv_Tja1145_MainFunction(void);

#define CANTRCV1145_STOP_SEC_CODE
#include "cantrcv1145_memmap.h"

#endif /* CANTRCV_TJA1145_H_ */

